# //指定解析文件对应的语法，推荐下面的文本，表示version 1的最新版本
# syntax=docker/dockerfile:1 
# //父镜像
FROM python:3.10.8-bullseye

# 创建跟宿主机相同的用户，方便容器中产生的文件映射出来后，宿主机的用户也能正常读写。
# 注意指定与宿主机用户相同的gid和uid
ARG user_name=hp
ARG group_name=hp

ARG user_id=hp
ARG group_id=hp

RUN groupadd -g $group_id $group_name 
RUN useradd -r -u $user_id -g $group_name $user_name
USER $user_name
# //指定工作路径，docker之后的命令都从该路径开始，方便编写命令时使用相对路径
WORKDIR /home/$user_name
COPY --chown=$group_name:$user_name .bashrc .

# // 1. pip安装依赖于requirements.txt，所以在pip安装之前先拷贝requirements.txt文件。
# //    这样当txt文件发生变化后，pip会重新安装；而如果txt文件没变，则pip也不会重新安装。
# // 2. 这是image layer的cache机制，这里的每个指令都是一个layer，
# //    只有在指令涉及的文件改变的情况下当前以及之后的指令才会重新执行。
COPY --chown=$group_name:$user_name pip.conf ./.pip/pip.conf
COPY --chown=$group_name:$user_name ./app/requirements.txt ./app/requirements.txt
RUN pip install -r ./app/requirements.txt

# 安装django后生成的命令会放到/home/hp/.local/bin/目录下
ENV PATH=${PATH}:/home/$user_name/.local/bin/

# // 拷贝剩余的文件
COPY --chown=$group_name:$user_name ./app ./app

# // 启动flask应用
# CMD ["python", "-m", "flask", "run", "--host=0.0.0.0"]